﻿ using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using vensoft.Entities;
using vensoft.BussinesLogic;

namespace vensoft.Win32
{
    public partial class frmRegistrarVenta : Form
    {
        IVentaBL ventaBL;
       
        public frmRegistrarVenta()
        {
            InitializeComponent();
            ventaBindingSource.AddNew();

            ventaBL = new VentaBL();           
        }

        private void btnBuscarCliente_Click(object sender, EventArgs e)
        {
            frmGestionarCliente formCliente = new frmGestionarCliente();
            formCliente.estadoBotones = 0;
            formCliente.ShowDialog();
            if (formCliente.Validacion != 1)
            {
                CurrentVenta.Cliente = formCliente.cliente;
                ventaBindingSource.ResetBindings(true);
            }
        }

        public List<Usuario> UsuarioActual { get; set; }

        private void frmRegistrarVenta_Load(object sender, EventArgs e)
        {
            CurrentVenta.Personal = new Personal();
            CurrentVenta.Personal.Cod_Personal = UsuarioActual.ElementAt(0).Cod_Personal;
            CurrentVenta.Personal.nombre = UsuarioActual.ElementAt(0).Nomb_Usuario;
            CurrentVenta.Personal.dni = UsuarioActual.ElementAt(0).DNI;
            CurrentVenta.nombre_Pers = CurrentVenta.Personal.nombre;
            CurrentVenta.PersonalId = CurrentVenta.Personal.Cod_Personal;
            ventaBindingSource.ResetBindings(true);                        
        }

        public void Llenar()
        {
            ventaBindingSource.DataSource = CurrentVenta;
            productoBindingSource.DataSource = CurrentProducto;            
        }

        public Venta CurrentVenta
        {
            get { return ventaBindingSource.Current as Venta; }
            set
            {
                ventaBindingSource.DataSource = value;
            }
        }

        public Producto CurrentProducto
        {
            get { return productoBindingSource.Current as Producto; }
            set
            {
                productoBindingSource.DataSource = value;
            }
        }

        private void btnBuscarProducto_Click(object sender, EventArgs e)
        {
            frmGestionarProducto frmbuscp = new frmGestionarProducto();
            frmbuscp.estadoBotones = 0;
            frmbuscp.ShowDialog();
            if (frmbuscp.Validacion != 1)
            {
                CurrentProducto = frmbuscp.Current;
                productoBindingSource.ResetBindings(true);
            }

        }

        private void btnAgregar_Click_1(object sender, EventArgs e)
        {
            var query = from p in CurrentVenta.Detalle
                        where p.Producto.Cod_Producto == CurrentProducto.Cod_Producto
                        select p;

            if (CurrentProducto != null)
            {
                if (query.Count() > 0)
                {
                    DetalleVenta detalle = query.Single();

                    detalle.Cantidad += nudCantidad.Value;
                    //CurrentVenta.Total = detalle.Cantidad;
                    CurrentVenta.Total = CurrentVenta.Detalle.Sum(d => d.Monto);
                    ventaBindingSource.ResetBindings(true);
                    detalleBindingSource.ResetBindings(true);

                }
                else
                {
                    DetalleVenta detalle = new DetalleVenta()
                       {
                           Producto = CurrentProducto,
                           Cantidad = Int32.Parse(nudCantidad.Value.ToString()),
                           Precio = decimal.Parse(precioTextBox.Text)
                           
                       };

                    CurrentVenta.Detalle.Add(detalle);
                    CurrentVenta.Total = CurrentVenta.Detalle.Sum(d => d.Monto);

                    ventaBindingSource.ResetBindings(true);
                    detalleBindingSource.ResetBindings(true);                    
                }
            }
        }

        private void btnEditarProveedor_Click(object sender, EventArgs e)
        {
            if (CurrentProducto != null || CurrentVenta.Cliente != null || CurrentVenta.Personal != null)
            {
                ventaBL.RegistrarVenta(CurrentVenta);
                MessageBox.Show("Venta Registrada");
                Close();
            }
        }

        private void nudCantidad_Validating(object sender, CancelEventArgs e)
        {
            ErrorProvider(nudCantidad);
        }

        private void ErrorProvider(NumericUpDown N)
        {
            if (N.Value > Convert.ToInt32(stockTextBox.Text))
            {
                btnAgregar.Enabled = false;
                erpValidarCantidad.SetError(N, "No tiene stock suficiente.");
            }
            else
            {
                btnAgregar.Enabled = true;
                erpValidarCantidad.SetError(N, "");
            }
        }



        private void btnCancelar_Click(object sender, EventArgs e)
        {
            Close();
        }

    }
}
